home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2004 April
/
Gamestar_61_2004-04_dvdb.iso
/
DVDStar
/
Editace
/
hltp.exe
/
{app}
/
Applications
/
QuArK
/
plugins
/
maphalflifeinfodecal.py
< prev
next >
Wrap
Text File
|
2004-01-05
|
7KB
|
193 lines
""" QuArK - Quake Army Knife
"""
#$Header: /cvsroot/quark/runtime/plugins/maphalflifeinfodecal.py,v 1.3 2003/12/18 21:51:46 peter-b Exp $
Info = {
"plug-in": "Half-Life infodecal helper",
"desc": "A macro to help making strings of HL-infodecals.",
"date": "29 jan 98",
"author": "Decker",
"author e-mail": "decker@post1.tele.dk",
"quark": "Version 5.4" }
from quarkpy.maputils import *
from quarkpy.maphandles import *
import quarkpy.mapduplicator
import plugins.deckerutils
StandardDuplicator = quarkpy.mapduplicator.StandardDuplicator
DuplicatorManager = quarkpy.mapduplicator.DuplicatorManager
# DupOffsetHandle = quarkpy.mapduplicator.DupOffsetHandle
class HalfLifeInfodecalHelper(StandardDuplicator):
def readvalues(self):
StandardDuplicator.readvalues(self)
s = self.dup["text"] # The string to convert to infodecals
if s:
self.text = s
else:
self.text = None
s = self.dup["wildchar"]
if s:
self.wildchar = s
else:
self.wildchar = '@'
s = self.dup["tex_upper"] # Texture-templatename of Upper characters
if s:
self.tex_upper = s
else:
self.tex_upper = None
s = self.dup["char_upper"] #
if s:
self.char_upper = s
else:
self.char_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
s = self.dup["tex_lower"] # Texture-templatename of Lower characters
if s:
self.tex_lower = s
else:
self.tex_lower = None
s = self.dup["char_lower"] #
if s:
self.char_lower = s
else:
self.char_lower = "abcdefghijklmnopqrstuvwxyz"
s = self.dup["tex_numeric"] # Texture-templatename of Numeric characters
if s:
self.tex_numeric = s
else:
self.tex_numeric = None
s = self.dup["char_numeric"] # Texture-templatename of Numeric characters
if s:
self.char_numeric = s
else:
self.char_numeric = "+-,.0123456789"
def do(self, item, character=None, translate=None):
if not character:
return item
if translate:
StandardDuplicator.do(self, item) # Do standard offset/matrix calculations
if character in self.char_numeric: # Is it a numeric char?
if self.tex_numeric: # Is numeric texture-template specified?
pos = self.tex_numeric.find(self.wildchar) # Try to find wildchar in texture-templatename
if pos > -1:
item["texture"] = self.tex_numeric[:pos] + character + self.tex_numeric[pos + 1:]
else:
item["texture"] = self.tex_numeric + character # Just append the character, and hope thats going to work
elif character in self.char_upper:
if self.tex_upper: # Is upper texture-template specified?
pos = self.tex_upper.find(self.wildchar) # Try to find wildchar in texture-templatename
if pos > -1:
item["texture"] = self.tex_upper[:pos] + character + self.tex_upper[pos + 1:]
else:
item["texture"] = self.tex_upper + character # Just append the character, and hope thats going to work
elif character in self.char_lower:
if self.tex_lower: # Is lower texture-template specified?
pos = self.tex_lower.find(self.wildchar) # Try to find wildchar in texture-templatename
if pos > -1:
item["texture"] = self.tex_lower[:pos] + character + self.tex_lower[pos + 1:]
else:
item["texture"] = self.tex_lower + character # Just append the character, and hope thats going to work
return item
def buildimages(self, singleimage=None):
try:
self.readvalues()
except:
print "Note: Invalid HL-InfoDecal Specific/Args."
return
if not self.text:
return
thissingleimage = singleimage
newobjs = []
for i in range(len(self.text)):
if i == 0:
item = quarkx.newobj("infodecal:e")
item["origin"] = self.dup["origin"]
item.translate(quarkx.vect("0 0 0")) # Force the item to show up, when doing an "Dissociate items"
item = self.do(item, self.text[i])
else:
if self.text[i - 1] <= ' ' or self.text[i - 1] > '~': # If previous item was illegal char, don't make a new item, but reuse it.
item = self.do(item, self.text[i], 1)
else:
item = self.do(item.copy(), self.text[i], 1)
if ((thissingleimage is None) or (0==thissingleimage)) and (self.text[i] > ' ' and self.text[i] <= '~'):
newobjs = newobjs + [item]
return newobjs
def handles(self, editor, view):
# h = DuplicatorManager.handles(self, editor, view)
h = quarkpy.maphandles.CenterEntityHandle(self.dup, view, quarkpy.maphandles.IconHandle)
try:
self.readvalues()
if not self.offset:
return h
except:
return h
try:
self.text = self.dup["text"]
count = int(len(self.text))
except:
count = 0
for i in range(1, count):
if (self.text[i] > ' ' and self.text[i] <= '~'): # Skip illegal characters
# h.append(DupOffsetHandle(self.origin + self.offset*i, self.dup, self.offset, i))
h.append(HalfLifeInfoDecalDupOffsetHandle(self.origin + self.offset*i, self.dup, self.offset, i))
return h
class HalfLifeInfoDecalDupOffsetHandle(quarkpy.mapduplicator.DupOffsetHandle):
def drag(self, v1, v2, flags, view):
import quarkpy.qhandles
delta = v2-v1
if flags&MB_CTRL:
delta = quarkpy.qhandles.aligntogrid(self.pos + delta, 1) - self.pos
else:
delta = quarkpy.qhandles.aligntogrid(delta, 0)
if delta or (flags&MB_REDIMAGE):
new = self.centerof.copy()
new["offset"] = str(self.dupoffset + delta/self.divisor)
new = [new]
else:
new = None
return [self.centerof], new
def HalfLifeInfoDecalRegister():
# Register HalfLifeInfoDecalHelper in Duplicators & misc folder
newdup = quarkx.newobj("Half-Life Infodecal Helper:d")
newdup["text"] = "HALFLIFE"
newdup["wildchar"] = "@"
newdup["tex_upper"] = "{CAPS@"
newdup["tex_lower"] = " "
newdup["tex_numeric"] = "{MED#S@"
newdup["origin"] = "0 0 0"
newdup["offset"] = "12 0 0"
newdup["macro"] = "dup hlinfodecal"
plugins.deckerutils.RegisterInToolbox("New map items...", "Duplicators & misc", newdup)
### HalfLifeInfoDecalRegister()
quarkpy.mapduplicator.DupCodes.update({
"dup hlinfodecal": HalfLifeInfodecalHelper,
})
# ----------- REVISION HISTORY ------------
# $Log: maphalflifeinfodecal.py,v $
# Revision 1.3 2003/12/18 21:51:46 peter-b
# Removed reliance on external string library from Python scripts (second try ;-)
#
# Revision 1.2 2001/02/18 20:21:56 decker_dk
# Do not register itself in 'New map items...'
#
#History:
#1999-11-14 Added self-registering
#1999-01-29 Made so only one group gets created, when "Dissociate items"
#1999-01-23 Removed redimage when moving center/duphandles of the HalfLifeInfodecalHelper duplicator.